#ifndef INT_TABLE_H
#define INT_TABLE_H
#define CAPACITY_INIT 10

typedef unsigned long INT_TABLE_KEY_TYPE;
typedef int INT_TABLE_VAL_TYPE;

typedef struct int_hashNode_s {
  INT_TABLE_KEY_TYPE key;
  INT_TABLE_VAL_TYPE val;
  struct int_hashNode_s *next;
} int_hashNode;

typedef struct int_hashTable_s {
  int_hashNode **buckets;
  int size;
  int capacity;
  uint32_t seed;
} intTable;

intTable *int_table_create();

int int_table_put(intTable *h, INT_TABLE_KEY_TYPE key, INT_TABLE_VAL_TYPE val);
int int_table_del(intTable *h, INT_TABLE_KEY_TYPE key);
int int_table_find(intTable *h, INT_TABLE_KEY_TYPE key,
                   INT_TABLE_VAL_TYPE *val);

#endif